
#ifndef PARSER_HPP_
#define PARSER_HPP_

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>

#include "../logger/logger.hpp"
/**
 * Class Parser: encargada de levantar linea por linea
 * los archivos ingresados y de diferenciar sus campos.
 */
class Parser {
private:
	std::ifstream	file_to_parse;
	Logger			*logger;
	char 			separator;
	int 			quantity;
	std::string		line;

public:

	/**
	 * Constructor por defecto de la clase Parser.
	 */
	Parser();

	/**
	 * Constructor parametrizado de la clase Parser.
	 */
	Parser(std::string &file_parse, std::string &file_conf, Logger *log);

	/**
	 * Destructor de la clase Parser.
	 */
	virtual ~Parser();

	/**
	 * Generador del contenido de la clase Parser.
	 */
	void create(std::string &file_parse, std::string &file_conf, Logger *log);

	/**
	 * Parsea la siguiente linea del archivo de entrada.
	 * @return 1 si pudo obtener la linea siguiente.
	 * @return 0 en otro caso.
	 */
	int nextLine();

	/**
	 * Metodo getter de la cantidad de campos obtenida
	 * en la linea parseada anteriormente.
	 * @return cantidad de campos obentenida en la linea
	 * previa.
	 */
	int getNumberOfFields();

	/**
	 * Metodo getter del campo solicitado por el numero
	 * de campo pasado por parametro.
	 * @param number de tipo int.
	 * @param field de tipo std::string
	 * @return 1 si pudo obtener el campo.
	 * @return 0 en caso contrario.
	 * @return en field devuelve el campo solicitado
	 */
	int getField(int number, std::string &field);

};

#endif /* PARSER_HPP_ */
